Thực đơn
Prolog Ví dụPhần này trình bày một số chương trình ví dụ, nó có thể chạy tốt trong SWI-PROLOG.
split(H, [A|X], [A|Y], Z):- order(A, H), split(H, X, Y, Z).split(H, [A|X], Y, [A|Z]):- not(order(A, H)), split(H, X, Y, Z).split(_, [], [], []).quicksort([], X, X).quicksort([H|T], S, X):- split(H, T, A, B), quicksort(A, S, [H|Y]), quicksort(B, Y, X).
hanoi(N):- move(N, left, centre, right).move(0, _, _, _):-!.move(N, A, B, C):- M is N-1, move(M, A, C, B), inform(A, B), move(M, C, B, A).inform(X, Y):- write([move, a, disc, from, the, X, pole, to, the, Y, pole]), nl.
/* Tính đạo hàm */d(X,X,1):-!. /* d x dx = 1 */d(C,X,0):- atomic(C). /* d c dx = 0 */d(-U,X,-A):- d(U,X,A). /* d -u dx = - d u dx */ d(U+V,X,A+B):- d(U,X,A), d(V,X,B). /* d u+v dx = d u dx + d v dx */d(U-V,X,A-B):- d(U,X,A), d(V,X,B). /* d u-v dx = d u dx - d v dx */d(C*U,X,C*A):- atomic(C), C \= X, d(U,X,A),!. /* d c*u dx = c*d u dx */d(U*V,X,B*U+A*V):- d(U,X,A), d(V,X,B). /* d u*v dx = u*d v dx + v*d u dx */ d(U/V,X,A):- d(U*V^(-1),X,A). /* d u/v dx = d (u*v)^-1 dx */d(U^C,X,C*U^(C-1)*W):- atomic(C), C \= X, d(U,X,W). /* d u^c dx = c*u^(c-1)*d u dx */d(log(U),X,A*U^(-1)):- d(U,X,A). /* d ln(u) dx = u^-1 * d u dx */
/* Tính tích phân */i(0,X,0):-!. /* Int 0 dx = 0 */i(X,X,(X*X)/2):-!. /* Int X dx = (X^2)/2 */i(C,X,C*X):- atomic(C). /* Int c dx = c*x */i(-U,X,-A):- i(U,X,A). /* Int -U dx = - Int U dx */i(U+V,X,A+B):- i(U,X,A), i(V,X,B). /* Int U+V dx = Int U dx + Int V dx */ i(U-V,X,A-B):- i(U,X,A), i(V,X,B). /* Int U-V dx = Int U dx - Int V dx */i(C*U,X,C*A):- atomic(C), C \= X, i(U,X,A),!. /* Int cU dx = c (Int U dx) */i(X^C,X,(X^(C+1))/(C+1)):- atomic(C),!. /* Int x^c dx = x^(c+1)/(c+1) */i(U,V,U*V-A):- d(V,U,A),!. /* Int u dv = u*v - Int v du */
/* Một số luật đơn giản */s(+,X,0,X). /* x + 0 = x */s(+,0,X,X). /* 0 + x = x */s(+,X,Y,X+Y). /* x + y = x + y */s(+,X,Y,Z):- integer(X), integer(Y), Z is X+Y. /* x + y = z <- Calculate */s(*,_,0,0). /* anything * 0 = 0 */s(*,0,_,0). /* 0 * anything = 0 */s(*,1,X,X). /* 1 * x = x */s(*,X,1,X). /* x * 1 = x */s(*,X,Y,X*Y). /* x * y = x * y */s(*,X*Y,W,X*Z):- integer(Y), integer(W), Z is Y*W. s(*,X,Y,Z):- integer(X), integer(Y), Z is X*Y. /* x * y = z <- Calculate */
/* Đơn giản hoá */simp(E,E):- atomic(E),!.simp(E,F):- E =.. [Op, La, Ra], simp(La,X), simp(Ra,Y), s(Op,X,Y,F).
Thực đơn
Prolog Ví dụLiên quan
Prolog Prologis Proligestone Protogrammus alboranensis Protogrammus sousai Prolagus Protogrammus Protogrammus antipodus Prolophota Prolagus sardusTài liệu tham khảo
WikiPedia: Prolog http://www.csse.monash.edu.au/~lloyd/tildeLogic/Pr... http://www.cs.kuleuven.ac.be/~remko/prolog/faq/fil... http://www.amzi.com/AdventureInProlog/advfrtop.htm http://www.amzi.com/ExpertSystemsInProlog/index.ht... http://eclipse.crosscoreop.com/ http://www.declarativa.com/interprolog/ http://inap.dialogengines.com http://www.visual-prolog.com/vip6/community/exampl... http://www.visual-prolog.com/vip6/tutorial/ http://kti.ms.mff.cuni.cz/~bartak/prolog/index.htm...